<?php
namespace View;

require_once("Model/UserLogin.php");

class LoginView {
	/**
	 * @var $userName (Innehåller användarnamnet användaren skriver in)  
	 * @var $passWord (Innehåller lösenordet användaren skriver in)
	 * @var $loginButton (Innehåller information gällande inloggningsknappen)
	 * @var $saveLogin (Visar om användaren vill fortsätta hållas inloggad)
	 * @var $sessionValidation (Håller ordning på sessionsstölder)
	 * @var $logoutButton (Innehåller information gällande utloggningslänken)
	 * @var $message (Innehåller eventuella meddelanden till användaren)
	 * @var $nameValue (Håller ordning på sparade användarnamn som ska visas utåt)
	 * @var $logincheck (Instans av klassen Userlogin från namespace Model)
	 */
	
	private static $userName = "Användarnamn";
	private static $passWord = "Lösenord";
	private static $loginButton = "Login";
	private static $saveLogin = "Spara";
	private static $sessionValidation = "Validering";
	private $logoutButton = "logout";
	private $message = "";
	private $nameValue = "";
	private $loginCheck = "";
	
	public function __construct(){
		$this->loginCheck = new \Model\UserLogin();
		
		if (!($this->loginCheck->checkSessionValidation())){
			$this->loginCheck->setSessionValidation($_SERVER["HTTP_USER_AGENT"]);
		}
		if($this->loginCheck->isSessionCreated()){
			$_POST[self::$userName] = $this->loginCheck->getSessionUsername();
			$_POST[self::$passWord] = $this->loginCheck->getSessionPassword();
		}	
	}	
	
	//@TODO: Refaktorera så funktionen inte är så lång!
	/**	
	 * @return Boolean (Inloggningsstatus)
	 */
	public function loginAttemptSuccessful(){			
		if ($this->loginCheck->getSessionValidation() != $_SERVER["HTTP_USER_AGENT"]) {
			return false;
		}
		if (isset($_POST[self::$loginButton])) {
			if($this->userClickedLogin($this->loginCheck)){
				return true;
			}
			else{
				return false;
			}
		}
		if($this->loginCheck->isSessionCreated()){
			return true;
		}	
		if(isset($_COOKIE[self::$userName]) && isset($_COOKIE[self::$passWord])){
			$cookieEndTimer = $this->loginCheck->getCookieTimer();		
			if(time() < $cookieEndTimer && $_COOKIE[self::$passWord] == "8be3c943b1609fffbfc51aad666d0a04adf83c9d"){
				return true;
			}
			else{	
				setcookie(self::$userName, "", time()-1000);
				setcookie(self::$passWord, "", time()-1000);	
				$this->message = "";
				$this->message .= "Felaktig information i cookie";	
				return false;
			}
		}
	}
	
	/**
	 * @return Boolean (Utloggningsstatus)
	 */	
	public function logoutAttemptSuccessful(){
		if (isset($_GET[$this->logoutButton])){
			//Unset på både GET- och POST-arrayerna.
			unset($_POST[self::$userName]);
			unset($_POST[self::$passWord]);	
			
			//Unset på sessionsvariabler.
			$this->loginCheck->unsetEntireSession();
			
			//Cookies tas bort genom att ändra utgångstiden.
			setcookie(self::$userName, "", time()-1000);
			setcookie(self::$passWord, "", time()-1000);	
			
			$this->message = "Du är nu utloggad";	
			
			return true;
		}	
		else {
			return false;
		}
	}
			
	/**
	 * @return String (HTML)
	 */
	public function getLoginHTML(){
		return "<h1>Laborationskod cg222gb</h1>
				<h2>Ej inloggad</h2>
				<form action='?' method='post'>
					<fieldset>				
						<legend>Login - Skriv in användarnamn och lösenord</legend>
						<p>" . $this->message . "</p>
						<label for='User' >Användarnamn :</label>
						<input type='text' name='" . self::$userName . "' id='User' value='" . $this->nameValue . "' />
						<label for='PassWord' >Lösenord  :</label>
						<input type='password' name='" . self::$passWord . "' id='PassWord' value='' />
						<input type='checkbox' name='" . self::$saveLogin . "' value=''>Håll mig inloggad
						<input type='submit' name='" . self::$loginButton . "' value='Logga In' />
					</fieldset>
				</form>";
	}		
	
	/**
	 * @return Boolean (Om användarens inloggning blev godkänd eller ej)
	 */
	public function userClickedLogin($loginCheck){
									
		$this->setUserMessage($loginCheck);	
		
		if($loginCheck->userLoginCheck($_POST[self::$userName], $_POST[self::$passWord])){
			$loginCheck->setSessionUsername($_POST[self::$userName]);
			$loginCheck->setSessionPassword($_POST[self::$passWord]);
		}
				
		if($loginCheck->isSessionCreated()){
			if(isset($_POST[self::$saveLogin])){
				$cookieTimer = $loginCheck->setCookieTimer();
			
				setcookie(self::$userName, $loginCheck->getSessionUsername(), $cookieTimer);
				setcookie(self::$passWord, sha1($loginCheck->getSessionPassword()), $cookieTimer);
				
				$this->message .= " och vi kommer ihåg dina inloggningsuppgifter";		
			}							
			return true;
		}
		else {			
			return false;
		}
	}

	/**
	 * @return String (HTML)
	 */
	public function getLogoutHTML(){
		return "<h1>Laborationskod cg222gb</h1>
				<h2>Inloggad</h2>
				<p>" . $this->message . "</p>
				<a href='?" . $this->logoutButton . "'>Logga ut</a>";
	}		

	/**
	 * @return String (Sidtitel)
	 */
	public function getLoginTitle(){
		return "Laboration 1. Ej inloggad.";
	}
	
	/**
	 * @return String (Sidtitel)
	 */	
	public function getLogoutTitle(){
		return "Laboration 1. Inloggad.";
	}
	
	public function setUserMessage($loginCheck){
		$this->message = $loginCheck->loginMessageCheck($_POST[self::$userName], $_POST[self::$passWord]);
		
		if($_POST[self::$userName] == "Admin" || $_POST[self::$passWord] == "Password"){
			$this->nameValue = $_POST[self::$userName];
		}
	}
}











